package cn.luke.basic.services;

import cn.luke.basic.entity.DtoTemplateRole;
import cn.luke.basic.enums.EnumPublicEnableOrDisable;
import cn.luke.basic.utils.UtilsEnum;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;

import java.util.Map;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;


import cn.luke.basic.mapper.MapperTemplateRole;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;


@Service
public class ServiceTemplateRole extends ServiceImpl<MapperTemplateRole, DtoTemplateRole> implements BaseService<DtoTemplateRole> {

    @Override
    public LambdaQueryWrapper<DtoTemplateRole> fillParams(Map<String, Object> params) {
        LambdaQueryWrapper<DtoTemplateRole> qw = loadQw();
        qw.eq(DtoTemplateRole::getTemplateId, params.get("templateId"))
                .eq(ObjectUtils.isNotEmpty(params.get("status")), DtoTemplateRole::getStatus, params.get("status"))
                .orderByDesc(DtoTemplateRole::getSort)
                .orderByDesc(DtoTemplateRole::getId)
        ;
        return qw;
    }

    /**
     * 根据模板id查询
     */
    @Transactional
    public long countByTemplateId(Integer templateId) {
        final LambdaQueryWrapper<DtoTemplateRole> wrapper = loadQw();
        wrapper.eq(DtoTemplateRole::getTemplateId, templateId)
                .eq(DtoTemplateRole::getStatus, EnumPublicEnableOrDisable.ENABLE.getCode());
        return count(wrapper);
    }
    /**
     * 模板规则-状态修改
     */

    public void updateStatus(Integer id, Integer status, Integer templateId) {
        Assert.state(findByTemplateId(templateId, id) != 0, "数据不存在");
        UtilsEnum.existsInEnum(EnumPublicEnableOrDisable.class, status);
        final DtoTemplateRole entity = new DtoTemplateRole();
        entity.setId(id);
        entity.setStatus(status);
        updateById(entity);
    }
    private long findByTemplateId(Integer templateId, Integer id) {
        final LambdaQueryWrapper<DtoTemplateRole> wrapper = loadQw();
        wrapper.eq(DtoTemplateRole::getTemplateId, templateId)
                .eq(DtoTemplateRole::getId, id);
        return count(wrapper);
    }


    /**
     * 删除
     */
    public void deleteById(Integer id, Integer templateId) {
        final LambdaQueryWrapper<DtoTemplateRole> wrapper = loadQw();
        wrapper.eq(DtoTemplateRole::getId, id)
                .eq(DtoTemplateRole::getTemplateId, templateId);
        Assert.state(count(wrapper) != 0, "数据不存在");
        removeById(id);
    }
}